package hao.bk.sql.dao;

import java.util.ArrayList;
import java.util.Collections;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.Toast;
import hao.bk.royalmap.RoyalMapActivity;
import hao.bk.sql.bo.Location;
import hao.bk.sql.bo.Typeshop;
import hao.bk.sql.sqlutils.SQLiteHelper;
import hao.bk.utils.Constants;

public class LocationDAO {
	
	private static final String LOCATION_TABLE = "location";
	private static final String ID_COLUMN = "_id";
	private static final String NAME_COLUMN = "name";
	private static final String TYPE_COLUMN = "type";
	private static final String PHONE_COLUMN = "phone";
	private static final String LOGO_COLUMN = "logo";
	private static final String FAVORITE_COLUMN = "favorite";
	private static final String ADDRESS_COLUMN = "address";
	
	private SQLiteHelper sqLiteHelper;
	RoyalMapActivity context;
	
	public LocationDAO(RoyalMapActivity context) {
		sqLiteHelper = new SQLiteHelper(context);
		this.context = context;
	}
	
	/**
	 * Lây các địa điểm theo typeshop
	 * 
	 * @param typeshop
	 * @return
	 */
	public ArrayList<Location> getLocationFromTypeshop(Typeshop typeshop) {
		ArrayList<Location> locations = new ArrayList<Location>();
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String where = TYPE_COLUMN + " = " + typeshop.getId();
			String[] allColumns = { ID_COLUMN, NAME_COLUMN, TYPE_COLUMN,
					PHONE_COLUMN, LOGO_COLUMN, FAVORITE_COLUMN, ADDRESS_COLUMN };
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, where, null, null, null, null);

			cursor.moveToFirst();
			Location location;
			//Toast.makeText(context, where, Toast.LENGTH_LONG).show();

			while (!cursor.isAfterLast()) {
				//chuyển đổi sang đối tượng location
				
				location = new Location();
				location.setId(cursor.getInt(0));
				location.setName(cursor.getString(1).trim());
				location.comparedStr = location.getName();
				location.setType(cursor.getInt(2));
				location.setPhone(cursor.getString(3));
				location.setLogo(cursor.getString(4).trim());
				boolean isFavorite = cursor.getInt(5) >0;
				location.setFavorite(isFavorite);
				location.setAddress(cursor.getString(6).trim());
				location.setTypeshop(typeshop);
				locations.add(location);
				cursor.moveToNext();
			}
			cursor.close();

		} catch (Exception e) {
			Log.e(Constants.TAG, "getLocationByTypeshop: Không lấy được dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return locations;
	}
	/** Đếm số các cửa hàng trong nhóm */
	public int numLocationFromTypeShop(Typeshop typeshop) {
		int num = 0;
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String where = TYPE_COLUMN + " = " + typeshop.getId();
			String[] allColumns = { ID_COLUMN, NAME_COLUMN, TYPE_COLUMN,
					PHONE_COLUMN, LOGO_COLUMN, FAVORITE_COLUMN, ADDRESS_COLUMN };
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, where, null, null, null, null);

			cursor.moveToFirst();
			//Toast.makeText(context, where, Toast.LENGTH_LONG).show();

			while (!cursor.isAfterLast()) {
				
				
				num ++;
			}
			cursor.close();

		} catch (Exception e) {
			Log.e(Constants.TAG, "getLocationByTypeshop: Không lấy được dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return num;
	}
	/** Đếm số các cửa hàng được yêu thích trong nhóm */
	public int numFavLocationFromTypeShop(Typeshop typeshop) {
		int num = 0;
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String where = TYPE_COLUMN + " = " + typeshop.getId();
			String[] allColumns = { ID_COLUMN, NAME_COLUMN, TYPE_COLUMN,
					PHONE_COLUMN, LOGO_COLUMN, FAVORITE_COLUMN, ADDRESS_COLUMN };
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, where, null, null, null, null);

			cursor.moveToFirst();
			//Toast.makeText(context, where, Toast.LENGTH_LONG).show();

			while (!cursor.isAfterLast()) {
				//chuyển đổi sang đối tượng location
				boolean isFav = cursor.getInt(5) >0;
				if(isFav == true)
					num ++;
			}
			cursor.close();

		} catch (Exception e) {
			Log.e(Constants.TAG, "getLocationByTypeshop: Không lấy được dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return num;
	}
	/**
	 * Lấy tất cả các địa điểm trong db
	 */
	public ArrayList<Location> getLocationInDb() {
		ArrayList<Location> locations = new ArrayList<Location>();
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String[] allColumns = { ID_COLUMN, NAME_COLUMN, TYPE_COLUMN,
					PHONE_COLUMN, LOGO_COLUMN, FAVORITE_COLUMN, ADDRESS_COLUMN };
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, null, null, null, null, null);

			cursor.moveToFirst();
			Location location;
			//Toast.makeText(context, where, Toast.LENGTH_LONG).show();

			while (!cursor.isAfterLast()) {
				//chuyển đổi sang đối tượng location
				
				location = new Location();
				location.setId(cursor.getInt(0));
				location.setName(cursor.getString(1).trim());
				location.comparedStr = location.getName();
				location.setType(cursor.getInt(2));
				location.setPhone(cursor.getString(3));
				location.setLogo(cursor.getString(4).trim());
				boolean isFavorite = cursor.getInt(5) >0;
				location.setFavorite(isFavorite);
				location.setAddress(cursor.getString(6).trim());
				locations.add(location);
				cursor.moveToNext();
			}
			cursor.close();

		} catch (Exception e) {
			Log.e(Constants.TAG, "getLocationInDb: Không lấy được dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return locations;
	}
	
	/**
	 * Tìm kiếm các Location được yêu thích
	 * 
	 * @param type
	 * @return
	 */
	public ArrayList<Location> getLocationsByFavorite() {
		ArrayList<Location> locations = new ArrayList<Location>();
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String[] allColumns = { ID_COLUMN, NAME_COLUMN, TYPE_COLUMN,
					PHONE_COLUMN, LOGO_COLUMN, FAVORITE_COLUMN, ADDRESS_COLUMN };
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, null, null, null, null, null);

			cursor.moveToFirst();
			Location location;
			//Toast.makeText(context, where, Toast.LENGTH_LONG).show();

			while (!cursor.isAfterLast()) {
				//chuyển đổi sang đối tượng location
				boolean isFavorite = cursor.getInt(5) >0;
				if(isFavorite == true) {
					location = new Location();
					location.setId(cursor.getInt(0));
					location.setName(cursor.getString(1).trim());
					location.comparedStr = location.getName();
					location.setType(cursor.getInt(2));
					location.setPhone(cursor.getString(3));
					location.setLogo(cursor.getString(4).trim());
					location.setFavorite(isFavorite);
					location.setAddress(cursor.getString(6).trim());
					locations.add(location);
				}
				cursor.moveToNext();
			}
			cursor.close();

		} catch (Exception e) {
			Log.e(Constants.TAG, "getLocationInDb: Không lấy được dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return locations;
	}
	
	/**
	 * Tìm kiếm các nhóm cửa hàng được yêu thích
	 * 
	 * @return danh sách các location có favorite = 1
	 */
	public int[] getSubTypeshopsByFavorite() {
		int[] typeIds = null;
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String where = FAVORITE_COLUMN + " = 1";
			where += " AND " + TYPE_COLUMN + "!= 0";
			String[] allColumns = { TYPE_COLUMN};
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, where, null, null, null, null);
			typeIds = new int[cursor.getCount()];
			cursor.moveToFirst();
			int i = 0;
			while (!cursor.isAfterLast()) {
				typeIds[i] = cursor.getInt(0);
				i++;
				cursor.moveToNext();
			}
			cursor.close();
		} catch (Exception e) {
			Log.e(Constants.TAG, "getCompaniesByFavorite: Không lấy dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return typeIds;
	}
	/**
	 * Đếm số địa điểm yêu thích
	 * 
	 * @param typeshop
	 * @return
	 */
	public int getCountFavorites() {
		int ret = 0;
		SQLiteDatabase database = null;
		try {
			database = sqLiteHelper.open();
			String where = FAVORITE_COLUMN + " = 1";
			String [] allColumns = {ID_COLUMN};
			Cursor cursor = database.query(LOCATION_TABLE, allColumns, where, null, null, null, null);
			ret = cursor.getCount();
			cursor.close();
		} catch (Exception e) {
			Log.e(Constants.TAG, "getCountFavorites: Không lấy dữ liệu từ bảng " + LOCATION_TABLE);
		} finally {
			SQLiteHelper.closeDB(database);
			sqLiteHelper.close();
		}
		return ret;
	}

	
}
